#include <emscripten.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include "losu/main.h"
#include "lvgl/lvgl.h"

// int Screen_Flag = 0;
// void scr_event_cb(lv_event_t* event) {
//   lv_indev_wait_release(lv_indev_get_act());
//   lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
//   if (dir == LV_DIR_LEFT) {
//     Screen_Flag = LV_DIR_LEFT;
//   } else if (dir == LV_DIR_RIGHT) {
//     Screen_Flag = LV_DIR_RIGHT;
//   } else if (dir == LV_DIR_TOP) {
//     Screen_Flag = LV_DIR_TOP;
//   } else if (dir == LV_DIR_BOTTOM) {
//     Screen_Flag = LV_DIR_BOTTOM;
//   }
//   printf("Screen_Flag %d\n", Screen_Flag);
// }

void MylosuTest() {
  // lv_obj_add_event_cb(lv_scr_act(), scr_event_cb, LV_EVENT_GESTURE,
  //                     &Screen_Flag);
  // return;
  // lv_example_bar_3();
  // lv_obj_t* arc = lv_arc_create(lv_screen_active());
  // lv_obj_set_size(arc, 150, 150);
  // lv_arc_set_rotation(arc, 135);
  // lv_arc_set_bg_angles(arc, 0, 270);
  // lv_arc_set_value(arc, 10);
  // // lv_obj_remove_flag(arc, LV_OBJ_FLAG_CLICKABLE);
  // lv_obj_remove_style(arc, NULL, LV_PART_KNOB);
  // lv_obj_center(arc);
  // lv_obj_t* label = lv_label_create(lv_scr_act());
  // lv_obj_set_style_text_font(label, &lv_font_source_han_sans_sc_,
  // LV_PART_MAIN); lv_label_set_text(label, "Hello World 你好");
  // lv_obj_center(label);

  // lv_label_set_long_mode(label, LV_LABEL_LONG_CLIP| LV_LABEL_LONG_WRAP);
  // // lv_obj_set_height(label, 20);
  // lv_obj_set_width(label, 150);
  // lv_label_set_text(label,
  //                   "This is a very long text that will be wrapped because
  //                   the " "long mode is enabled." "It looks like this is
  //                   working. " "And this is a second line.");

  // lv_obj_t* parent = lv_obj_create(lv_scr_act());
  // lv_obj_set_style_max_width(parent, 1000, 0);
  // lv_obj_set_style_layout(parent, LV_LAYOUT_FLEX, LV_PART_MAIN);
  // lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_ROW);
  // lv_obj_set_flex_align(parent, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_END,
  //                       LV_FLEX_ALIGN_CENTER);
  // lv_obj_set_style_size(parent, 400, 400, 0);
  // lv_obj_t* obj = lv_obj_create(parent);
  // lv_obj_set_size(obj, 150, 150);
  // lv_obj_set_pos(obj, 150, 50);

  // obj = lv_obj_create(parent);
  // lv_obj_set_size(obj, 100, 100);

  // obj = lv_obj_create(parent);
  // lv_obj_set_size(obj, 50, 50);
  // obj = lv_obj_create(parent);
  // lv_obj_set_size(obj, 150, 150);

  // obj = lv_obj_create(parent);
  // lv_obj_set_size(obj, 150, 150);

  // lv_obj_set_size(obj, 200, 200);
  // lv_obj_set_style_x(obj, lv_pct(75), 0);
  // // lv_obj_set_style_pad_left(obj, 200, 0);
  // lv_obj_t* t = lv_label_create(obj);
  // lv_label_set_text(t, "Hello World!");
  // lv_obj_center(t);
  // lv_obj_set_style_min_width(obj, LV_SIZE_CONTENT, 0);
  // lv_obj_t* bar = lv_bar_create(lv_scr_act());
  // lv_obj_set_style_bg_color(bar, lv_palette_main(LV_PALETTE_GREEN),
  //                           LV_PART_MAIN);
  // lv_obj_set_style_text_color(bar, lv_palette_main(LV_PALETTE_RED),
  //                             LV_PART_MAIN);
  // lv_bar_set_value(bar, 50, LV_ANIM_ON);
  // lv_bar_set_mode(bar, LV_BAR_MODE_SYMMETRICAL);
  // lv_obj_set_width(bar, 200);
  // LV_EVENT_ALL

  mkdir("/losu", 0777);
  emscripten_wget("main.losu", "/losu/main.losu");
  // emscripten_wget("image.png", "/losu/iamge.png");

  losu_vm_t vm = vm_create(256);
  vm_setpath(vm, "/losu");
  vm_setargs(vm, 0, NULL);
  vm_setmodule(vm, LOSU_NMODULE, LOSU_MODULE);
  gc_setthreshold(vm, 0);
  vm_dofile(vm, "/losu/main.losu");
  fprintf(stderr, "**** -------- ****\nmem use max %g KB, now %g KB\n",
          gc_getmemmax(vm) / 1024.0, gc_getmemnow(vm) / 1024.0);
}

// void MylosuTest() {
// lv_obj_set_style_layout(lv_scr_act(), LV_LAYOUT_FLEX, LV_PART_MAIN);
// lv_obj_set_style_flex_flow(lv_scr_act(), LV_FLEX_FLOW_ROW, LV_PART_MAIN);
// lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START,
//                       LV_FLEX_ALIGN_CENTER);
// lv_obj_t* obj = lv_obj_create(lv_scr_act());
// lv_obj_set_style_text_align

// lv_obj_t* parent = lv_obj_create(lv_scr_act());
// lv_obj_set_style_layout(parent, LV_LAYOUT_FLEX, LV_PART_MAIN);
// lv_obj_t obj = lv_obj_create(parent);

// lv_obj_set_size(parent, 200, 200);
// lv_obj_set_style_pad_left(parent, 0, 0);

// lv_obj_t* child = lv_obj_create(parent);
// // 设置子组件宽度为父组件的50%
// // lv_obj_set_style_width(child, lv_pct(50), 0);
// // lv_obj_set_style_margin_top(child, , 0);

// lv_obj_set_style_margin_right(
//     child, lv_obj_get_style_width(lv_obj_get_parent(child), LV_PART_MAIN) /
//     2, 0);
// lv_obj_create(parent);
// // 当父组件尺寸改变时，子组件宽度会自动调整
// lv_obj_set_style_size(parent, 400, 400, LV_PART_MAIN);
// lv_obj_set_style_margin_right(
//     child, lv_obj_get_style_width(lv_obj_get_parent(child), LV_PART_MAIN) /
//     2, 0);

// lv_obj_set_style_size(parent, 100, 100, LV_PART_MAIN);

// lv_obj_set_style_layout(lv_scr_act(), LV_LAYOUT_FLEX, LV_PART_MAIN);
// lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);
// lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_START,
// LV_FLEX_ALIGN_START,
//                       LV_FLEX_ALIGN_CENTER);
// lv_obj_t* obj;
// obj = lv_obj_create(lv_scr_act());
// lv_obj_set_style_width(obj, lv_pct(50), LV_PART_MAIN);
// obj = lv_obj_create(lv_scr_act());
// obj = lv_obj_create(lv_scr_act());
// obj = lv_obj_create(lv_scr_act());

// lv_obj_set_style_width(screen, 400, 0);
// lv_obj_set_style_height(screen, 400, 0);
// lv_obj_t* screen = lv_obj_create(lv_scr_act());
// // lv_obj_set_flex_flow(screen, LV_FLEX_FLOW_COLUMN);
// lv_obj_set_style_width(screen, 400, 0);
// lv_obj_set_style_height(screen, 400, 0);
// lv_obj_set_layout(screen, LV_LAYOUT_FLEX);
// lv_obj_t* obj = lv_obj_create(screen);
// obj = lv_obj_create(screen);
// lv_obj_set_x(obj, 200);

// lv_obj_set_flex_
// int n = 0;
// sscanf("123px", "%d", &n);
// printf("%d\n", n);
// lv_obj_set_style_text_font(lv_scr_act(), &lv_font_montserrat_12, 0);
// lv_obj_t* lab = lv_label_create(lv_scr_act());
// lv_label_set_text(lab, "Hello World");
// lv_obj_set_style_text_font(lab, &lv_font_montserrat_12, 0);
// lab = lv_label_create(lv_scr_act());
// lv_label_set_text(lab, "Hello World");
// lv_obj_set_style_text_font(lab, &lv_font_montserrat_24, 0);
// lv_obj_set_style_max_width(lab, 50, 0);
// lv_obj_t* obj = lv_obj_create(screen);
// lv_obj_t* lab = lv_label_create(obj);
// lv_label_set_text(lab, "Hello World");
// lv_obj_set_style_text_font(obj, &lv_font_montserrat_24, 0);
// lv_obj_set_x(lab, 100);
// lv_obj_set_style_width(obj, 300, 0);
// lv_obj_set_style_height(obj, 100, 0);

// lv_obj_set_style_pad_bottom(obj, 100, LV_PART_MAIN);
// lv_obj_set_style_margin_bottom(obj, 0, 0);

// obj = lv_obj_create(screen);
// lv_obj_set_style_x(obj, 0, 0);
// lv_obj_set_style_y(obj, 100, 0);

// lab = lv_label_create(obj);
// lv_label_set_text(lab, "Hello World");
// lv_obj_set_style_pad_top(lab, 50, 0);

// lv_obj_set_style_text_font(lab, &lv_font_montserrat_12, 0);
// lv_obj_set_x(lab, 50);
// lv_obj_set_style_width(obj, 300, 0);
// lv_obj_set_style_height(obj, 100, 0);
// lv_obj_set_style_pad_top(obj, 0, 0);
// lv_obj_set_style_margin_top(obj, 0, 0);
// uint8_t r, b, g;
// sscanf("rgb(255,128,100)", "rgb(%hhu,%hhu,%hhu)", &r, &g, &b);
// printf("%hhu,%hhu,%hhu\n", r, g, b);
// lv_obj_set_style_radius(obj, 0, 0);
// }

// // #define LV_CONF_PATH "lvgl/lv_conf.h"

// #include <emscripten.h>
// #include "lvgl/lvgl.h"

// static void event_handler(lv_event_t* e) {}
// void MylosuTest() {
//   // lv_obj_t* screen = lv_scr_act();
//   // lv_obj_set_flex_flow(screen, LV_FLEX_FLOW_COLUMN);

//   // lv_obj_t* obj1 = lv_obj_create(screen);
//   // lv_obj_set_flex_grow(obj1, 10);
//   // lv_obj_t* obj2 = lv_obj_create(screen);
//   // lv_obj_set_flex_grow(obj2, 90);

//   // lv_obj_t* label = lv_button_create(screen);
//   // lv_obj_set_size(label, 200, 50);
//   // // lv_obj_center(label);
//   // lv_obj_set_x(label, 0);
//   // lv_obj_t* screen = lv_scr_act();
//   // lv_obj_set_flex_flow(screen, LV_FLEX_FLOW_COLUMN);
//   // // lv_obj_set_flex_align(screen, LV_FLEX_ALIGN_START,
//   LV_FLEX_ALIGN_CENTER,
//   // //                       LV_FLEX_ALIGN_START);

//   // // lv_obj_t* obj = lv_obj_create(screen);
//   // // lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN_WRAP);
//   // // lv_obj_set_style_border_width(obj, 5, LV_PART_MAIN);
//   // // lv_obj_set_style_border_side(obj, LV_BORDER_SIDE_BOTTOM,
//   LV_PART_MAIN);
//   // // lv_obj_get_style_border_side(obj, LV_PART_MAIN);

//   // // // lv_obj_set_style_bg_color(obj, lv_color_make(0xff, 0x00, 0x00),
//   // // // LV_PART_MAIN); lv_obj_set_style_bg_opa(obj, 50, LV_PART_MAIN);
//   // // lv_obj_set_flex_grow(obj, 1);

//   // // lv_obj_t* bar = lv_bar_create(obj);
//   // // lv_bar_set_range(bar, 0, 100);
//   // // lv_bar_set_value(bar, 50, LV_ANIM_OFF);
//   // // lv_obj_set_width(bar, 200);
//   // // lv_obj_set_height(bar, 20);

//   // // lv_obj_set_style_bg_color(bar, lv_color_make(0x00, 0xff, 0x00), 0);
//   // // lv_obj_set_style_bg_opa(bar, 255, LV_PART_MAIN);
//   // // lv_obj_set_style_bg_color(bar, lv_color_make(0x00, 0x00, 0xff),
//   // //                           LV_PART_INDICATOR);

//   // // for (int i = 0; i < 5; i++) {
//   // //   bar = lv_bar_create(obj);
//   // //   lv_bar_set_range(bar, 0, 100);
//   // //   lv_bar_set_value(bar, 50, LV_ANIM_OFF);
//   // //   lv_obj_set_width(bar, 200);
//   // //   lv_obj_set_height(bar, 20);

//   // //   lv_obj_set_style_bg_color(bar, lv_color_make(0x00, 0xff, 0x00), 0);
//   // //   lv_obj_set_style_bg_opa(bar, 255, LV_PART_MAIN);

//   // //   lv_obj_set_style_bg_color(bar, lv_color_make(0x00, 0x00, 0xff),
//   // //                             LV_PART_INDICATOR);
//   // // }
//   // // lv_obj_t* bar = lv_bar_create(screen);
//   // // lv_bar_set_range(bar, 0, 100);
//   // // lv_bar_set_value(bar, 50, LV_ANIM_OFF);
//   // // lv_obj_set_width(bar, 200);
//   // // lv_obj_set_height(bar, 20);
//   lv_obj_t* list1 = lv_list_create(lv_screen_active());
//   lv_obj_set_flex_flow(lv_screen_active(), LV_FLEX_FLOW_COLUMN);
//   lv_obj_set_flex_grow(list1, 3);
//   // lv_obj_set_size(list1, 180, 220);
//   // lv_obj_set_style_max_width(list1, 100, LV_PART_MAIN);
//   // lv_obj_center(list1);

//   /*Add buttons to the list*/
//   lv_obj_t* btn;
//   lv_list_add_text(list1, "File");
//   btn = lv_list_add_button(list1, LV_SYMBOL_FILE, "New");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_DIRECTORY, "Open");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_SAVE, "Save");
//   lv_obj_set_style_bg_color(btn, lv_color_make(0xff, 0x00, 0x00), 0);
//   lv_obj_set_style_text_color(btn, lv_color_make(0xff, 0x00, 0x00), 0);
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_CLOSE, "Delete");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_EDIT, "Edit");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

//   lv_list_add_text(list1, "Connectivity");
//   btn = lv_list_add_button(list1, LV_SYMBOL_BLUETOOTH, "Bluetooth");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_GPS, "Navigation");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_USB, "USB");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

//   lv_list_add_text(list1, "Exit");
//   btn = lv_list_add_button(list1, NULL, "Apply" LV_SYMBOL_AUDIO);
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_CLOSE, "Close");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   // lv_obj_add_flag(list1, LV_OBJ_FLAG_HIDDEN);

//   list1 = lv_list_create(lv_screen_active());
//   // lv_obj_set_size(list1, 180, 220);
//   lv_obj_set_flex_grow(list1, 7);
//   // lv_obj_center(list1);

//   /*Add buttons to the list*/
//   lv_list_add_text(list1, "File");
//   btn = lv_list_add_button(list1, LV_SYMBOL_FILE, "New");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_DIRECTORY, "Open");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_SAVE, "Save");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_CLOSE, "Delete");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_EDIT, "Edit");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

//   lv_list_add_text(list1, "Connectivity");
//   btn = lv_list_add_button(list1, LV_SYMBOL_BLUETOOTH, "Bluetooth");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_GPS, "Navigation");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_USB, "USB");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

//   lv_list_add_text(list1, "Exit");
//   btn = lv_list_add_button(list1, NULL, "Apply" LV_SYMBOL_AUDIO);
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   btn = lv_list_add_button(list1, LV_SYMBOL_CLOSE, "Close");
//   lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
//   // lv_obj_add_flag(btn, LV_OBJ_FLAG_IGNORE_LAYOUT);

//   // lv_obj_t* scale = lv_scale_create(lv_screen_active());
//   // lv_obj_set_size(scale, 400, 100);
//   // lv_scale_set_mode(scale, LV_SCALE_MODE_HORIZONTAL_BOTTOM);
//   // lv_obj_center(scale);

//   // lv_scale_set_label_show(scale, true);

//   // // lv_scale_set_total_tick_count(scale, 100);
//   // // lv_scale_set_major_tick_every(scale, 5);

//   // // lv_obj_set_style_length(scale, 5, LV_PART_ITEMS);
//   // // lv_obj_set_style_length(scale, 10, LV_PART_INDICATOR);
//   // lv_scale_set_range(scale, 10, 40);
//   // lv_obj_set_style_radius(scale, 0, LV_PART_MAIN);
// }